package accesoRepositorio;



import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.sql.ResultSet;
import java.sql.SQLException;
import interfacesRemotas.interfazMesa;

import modelo.gestionReserva.*;

/**
 * Clase que implementa el acceso a los datos contenidos en las tablas
 * relacionadas con la información de las mesas
 * 
 * @author Luis Miguel Merino Bonilla, Carmen Pastor Morales
 * @version 2.0
 * @created 4-may-2007
 */
public class AccesoMesa extends UnicastRemoteObject
implements interfazMesa
{

	private static final long serialVersionUID = 1L;
	
	/**
	 * Consutructor de la clase
	 * @throws RemoteException
	 */
	public AccesoMesa() throws RemoteException
	{
		super();
	}

	/**
	 * Recupera los datos de una mesa de la base de datos
	 * @param idMesa Identificador de la mesa que se quiere recuperar
	 * @return Mesa
	 */
	public Mesa getMesa(int idMesa) throws RemoteException
	{
		  
		ConexionBD bd=new ConexionBD();
		Mesa mesa;
		ResultSet rs;
		int capacidad, plazasOcupadas, idRestaurante;
		String estadoMesa;
		
		if(!bd.abrir())
			return null;
		rs=bd.select("SELECT *" +
				" FROM Mesa WHERE num_mesa="+idMesa);
		if(rs==null)
			{
			bd.cerrar();
			return null;
			}

        try{
        	// OJO! Nos situamos en la primera fila del ResultSet
			rs.first();
			//Empezamos a extraer la informacion
			capacidad=rs.getInt("capacidad_maxima");
			plazasOcupadas=rs.getInt("capacidad_actual");
			idRestaurante=rs.getInt("id_restaurante");
			estadoMesa=rs.getString("estado");
			mesa=new Mesa(idMesa, estadoMesa, capacidad,plazasOcupadas,idRestaurante);
			
			mesa.setPlazas_perdidas(rs.getInt("plazas_perdidas"));
			mesa.setPlazas_perdidas_extremos(rs.getInt("plazas_perdidas_extremos"));
			
          }catch(SQLException e){
        	  System.err.println("Error en la clase AccesoMesa en el metodo getMesa: " + e.getMessage());
        	  bd.cerrar();
        	  return null;
          }
          
         bd.cerrar();
         return mesa;
	}
	
	/**
	 * Método que inserta una mesa en la base de datos
	 * @param Mesa
	 * @return boolean Cierto si se ha insertado la mesa correctamente
	 */
	public boolean insertMesa (Mesa mesa) throws RemoteException
		{
		ConexionBD bd=new ConexionBD();
		boolean insertada=false;
		if(!bd.abrir())
			return false;
		insertada=bd.insert("INSERT INTO Mesa VALUES("+mesa.getNumMesa()+","+mesa.getPlazasOcupadas()+","+
				mesa.getCapacidadMax()+","+mesa.getIdRestaurante()+",'"+mesa.getEstado()+"',"+ mesa.getPlazas_perdidas() + ", " + mesa.getPlazas_perdidas_extremos() + ");");
		bd.cerrar();
		return insertada;
		}
	
	/**
	 * Este metodo solo actualiza el estado de la mesa que se le pasa
	 * como parametro
	 * @param mesa
	 * @return boolean Cierto si se ha actualizado
	 */
	public boolean updateEstadoMesa (int numMesa, String nuevoEstado) throws RemoteException
		{
		ConexionBD bd=new ConexionBD();
		boolean actualizada=false;
		if(!bd.abrir())
			return false;
		actualizada=bd.insert("UPDATE Mesa SET estado='"+nuevoEstado+"' "+
				"WHERE num_mesa="+numMesa+";");
		bd.cerrar();
		return actualizada;
		}

	public boolean updateEstadoMesa(Mesa mesa) throws RemoteException {
		// TODO Auto-generated method stub
		return false;
	}
	
}
